export interface Option {
    label: string;
    value: string | number;
}

export interface ActionBtn<T = any> {
    text: string;
    onClick: (row: T, index: number) => any;
}

export interface IBaseTableConfig<T = any> {
    /**  数据唯一字段名 */
    idKey: string;
    /**  固定请求带上的参数{} */
    fixQuery: any;
    /**  默认显示页码 */
    page: number;
    /** 默认显示页数 */
    size: number;
    /** 请求分页参数key */
    pageKey: string;
    /** 请求分页参数key */
    sizeKey: string;
    /** 请求数据接口 */
    apiFunc: (params: any) => Promise<any>;
    /** 格式化表格数据，返回新的表格数据 */
    formatTableData?: (data: T[]) => T[];
    /** 发起请求时格式化对应的请求参数，入参params请求参数 */
    formatQueryParams?: (params: any) => any;
    /** 非异步搜索时，判断数据是否匹配
     * params 搜索参数
     * item 表格数据项
     */
    searchMap?: (params: any, item: any) => T[];
}

export interface IBaseTableData<T = any> {
    /** 表格数据 */
    items?: T[];
    page: {
        /** 表格数据总数 */
        total: number;
        pageNum?: number;
        pageSize?: number;
    };
}

export interface ControlConf<T = any> {
    /** 下拉框选项配置 */
    options: Option[];
    placeholder: string;
    type: string;
    value: any;
}

export interface ColumnsConfig<T = any> {
    /** 操作列按钮便捷配置，render优先级高于actionsList */
    actionsList: T[];
    /** 编辑类型 */
    editType: "input" | "select" | "date";
    /** 是否切换编辑 */
    changeEdit: boolean;
    /** 编辑控件配置项 */
    editConf: ControlConf;
    /** 过滤类型 */
    filterControlType: "input" | "select" | "date";
    /** 筛选控件配置项 */
    filterControl: ControlConf;
    key: string;
    minWidth: number | string;
    /** 单选当前激活的过滤器选项值 */
    filterOptionValue: string;
    /** 多选当前激活的过滤器选项值 */
    filterOptionValues: string[];
    /** 仅编辑 渲染单元格 优先级高于formateHtml */
    formateRender?: (row: T) => any;
    /** 渲染单元格 支持html标签 */
    formateHtml?: (row: T) => any;
    /** 渲染单元格 优先级高于formateRender  formateHtml */
    render?: (row: T, index?: number) => any;
    /** 渲染自定义筛选区域 */
    renderFilterMenu?: (action: T) => any;
    /** 渲染自定义筛选图标 */
    renderFilterIcon?: (action: T) => any;
}
